// 主应用入口文件
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const static = require('koa-static');
const path = require('path');
const dbConnection = require('./utils/dbConnection');
const apiRoutes = require('./routes/apiRoutes');

// 创建Koa应用实例
const app = new Koa();
const PORT = 13333;

// 配置中间件
app.use(bodyParser());
app.use(static(path.join(__dirname, 'views')));

// 使用API路由
app.use(apiRoutes.routes()).use(apiRoutes.allowedMethods());

// 提供静态HTML文件的路由
app.use(ctx => {
    if (ctx.path === '/') {
        ctx.type = 'html';
        ctx.body = require('fs').createReadStream(path.join(__dirname, 'views', 'index.html'));
    }
});

// 启动应用
async function startServer() {
    try {
        // 初始化数据库连接
        await dbConnection.init();
        
        // 启动HTTP服务器
        app.listen(PORT, () => {
            console.log(`服务器已启动，监听端口 ${PORT}`);
            console.log(`访问地址: http://localhost:${PORT}`);
        });
    } catch (error) {
        console.error('启动服务器失败:', error);
        process.exit(1);
    }
}

// 监听进程终止信号，关闭数据库连接
process.on('SIGINT', async () => {
    console.log('正在关闭服务器...');
    await dbConnection.close();
    process.exit(0);
});

// 启动服务器
startServer();